iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
自我挑戰組

iOS Junior的菜雞之路系列 第 6

滑動簡單,但不失優雅 UICollectionView

  • 分享至 

  • xImage
  •  

今天是要在tableViewCell裡面加上UICollectionView
因為我原本的架構上我希望有個title能夠在這個上面呈現,但又懶得搞sectionHeader
所以我想要直接在Xib上面加上title的UILabel就好

那麼要創建那麼要使用tableView的Xib

中間的部分就會是UICollectionView
記得拉好@IBOutlet

UITableViewCell

    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var contentCollectioinView: UICollectionView! {
        didSet {
                contentCollectioinView.register(forCellWithReuseIdentifier: [
                    String(describing: ContentCollectionViewCell.self),
                ])
                contentCollectioinView.delegate = self
                contentCollectioinView.dataSource = self
        }
    }


    override func awakeFromNib() {
        super.awakeFromNib()
        // 希望點下去不要反灰,所以選none
        selectionStyle = .none
        // Initialization code
    }

    // 因為目前資料互動不多,所以暫時份在Cell中
    var data: [String] = []
    
    func configure(data: [String]) {
        self.data = data
    }

UICollectionViewDelegate、UICollectionViewDataSource

extension ExampleTableViewCell: UICollectionViewDelegate, UICollectionViewDataSource {
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        // 因為資料互動不多,所以先在VC載入
        return data.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        //makeCell為自定義Func,在下面有寫
        let cell: ContentCollectionViewCell = collectionView.makeCell(indexPath: indexPath)
        cell.configure(model: data[indexPath.row])
        return cell
    }    
}

好用Func推薦

// 可以去Extension UICollectionView,這樣就不用每次都在那邊打ReuseIdentifier
func makeCell<T: UICollectionViewCell>(indexPath: IndexPath) -> T {
        let cell = self.dequeueReusableCell(withReuseIdentifier: String(describing: T.self), for: indexPath)
        return cell as! T
    }

UICollectionViewCell

目前希望呈現方式是一張一張卡片式的,所以UICollectionViewCell的Xib簡單拉

Kingfisher使用

因為要使用API抓下來的資料而非本地端的資料,那麼這次使用的是第三方套件Kingfisher來作為圖片呈現

記得先去SPM新增Kingfisher,非常簡單貼上Kingfisher網址到SPM新增就可以完成了

import UIKit
import KingFisher


class ContentCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var contentImageView: UIImageView!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    func configure(model: String) {
        let url = URL(string: model)
        contentImageView.kf.setImage(with: url)
    }
}

可以先在UICollectionViewDataSource先喂一些假資料,就會長得像這樣


坑:
這個坑比較少,跟tableView建構的時候類似


上一篇
形形色色,模樣打底
下一篇
編排的藝術師UICollectionViewDelegateFlowLayout
系列文
iOS Junior的菜雞之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言